package 炫彩元素类

import (
	xc "gitee.com/go_888/xcgui/xcgui/xc"
	xcc "gitee.com/go_888/xcgui/xcgui/xcc"
)

// X结构_滑动条 滑动条元素.
type X结构_滑动条 struct {
	X结构_基础元素
}

// 滑动条_创建, 创建滑动条元素.
//
// x: 元素x坐标.
//
// y: 元素y坐标.
//
// cx: 宽度.
//
// cy: 高度.
//
// hParent: 父是窗口资源句柄或UI元素资源句柄. 如果是窗口资源句柄将被添加到窗口, 如果是元素资源句柄将被添加到元素.
func X创建滑动条(元素x坐标, 元素y坐标, 宽度, 高度 int32, 父窗口句柄 int) *X结构_滑动条 {
	p := &X结构_滑动条{}
	p.X设置句柄(xc.X滑动条_创建(元素x坐标, 元素y坐标, 宽度, 高度, 父窗口句柄))
	return p
}

// 从句柄创建对象.
func X创建滑动条并按句柄(句柄 int) *X结构_滑动条 {
	p := &X结构_滑动条{}
	p.X设置句柄(句柄)
	return p
}

// 从name创建对象, 失败返回nil.
func X创建滑动条并按名称(名称 string) *X结构_滑动条 {
	handle := xc.X取对象并按名称(名称)
	if handle > 0 {
		p := &X结构_滑动条{}
		p.X设置句柄(handle)
		return p
	}
	return nil
}

// 从UID创建对象, 失败返回nil.
func X创建滑动条并按UID(UID int32) *X结构_滑动条 {
	handle := xc.X取对象并按UID(UID)
	if handle > 0 {
		p := &X结构_滑动条{}
		p.X设置句柄(handle)
		return p
	}
	return nil
}

// 从UID名称创建对象, 失败返回nil.
func X创建滑动条并按UID名称(名称 string) *X结构_滑动条 {
	handle := xc.X取对象并按UID名称(名称)
	if handle > 0 {
		p := &X结构_滑动条{}
		p.X设置句柄(handle)
		return p
	}
	return nil
}

// 滑动条_置范围, 设置滑动范围.
//
// range_: 范围.
func (s *X结构_滑动条) X设置范围(范围 int32) *X结构_滑动条 {
	xc.X滑动条_设置范围(s.X句柄, 范围)
	return s
}

// 滑动条_取范围, 获取滚动范围.
func (s *X结构_滑动条) X取范围() int32 {
	return xc.X滑动条_取范围(s.X句柄)
}

// 滑动条_置进度图片, 设置进度贴图.
//
// hImage: 图片句柄.
func (s *X结构_滑动条) X设置进度图片(图片句柄 int) *X结构_滑动条 {
	xc.X滑动条_设置进度图片(s.X句柄, 图片句柄)
	return s
}

// 滑动条_置滑块宽度, 设置滑块按钮宽度.
//
// width: 宽度.
func (s *X结构_滑动条) X设置滑块宽度(宽度 int32) *X结构_滑动条 {
	xc.X滑动条_设置滑块宽度(s.X句柄, 宽度)
	return s
}

// 滑动条_置滑块高度, 设置滑块按钮高度.
//
// height: 高度.
func (s *X结构_滑动条) X设置滑块高度(高度 int32) *X结构_滑动条 {
	xc.X滑动条_设置滑块高度(s.X句柄, 高度)
	return s
}

// 滑动条_置当前位置, 设置当前进度点.
//
// pos: 进度点.
func (s *X结构_滑动条) X设置当前位置(进度点 int32) *X结构_滑动条 {
	xc.X滑动条_设置当前位置(s.X句柄, 进度点)
	return s
}

// 滑动条_取当前位置, 获取当前进度点.
func (s *X结构_滑动条) X取当前位置() int32 {
	return xc.X滑动条_取当前位置(s.X句柄)
}

// 滑动条_取滑块, 返回滑块按钮句柄.
func (s *X结构_滑动条) X取滑块() int {
	return xc.X滑动条_取滑块(s.X句柄)
}

// 滑动条_置水平, 设置水平或垂直.
//
// bHorizon: 水平或垂直.
func (s *X结构_滑动条) X设置水平(水平或垂直 bool) *X结构_滑动条 {
	xc.X滑动条_设置水平(s.X句柄, 水平或垂直)
	return s
}

// ------------------------- 事件 ------------------------- //

type X事件_滑动条_滑块位置改变 func(pos int32, pbHandled *bool) int            // 滑动条元素,滑块位置改变事件.
type X事件_滑动条_滑块位置改变1 func(hEle int, pos int32, pbHandled *bool) int // 滑动条元素,滑块位置改变事件.

// 滑动条元素,滑块位置改变事件.
func (s *X结构_滑动条) X事件_滑块位置改变(回调函数 X事件_滑动条_滑块位置改变) bool {
	return xc.X元素_注册事件C(s.X句柄, xcc.X元素事件_滑动条_滑块位置改变, 回调函数)
}

// 滑动条元素,滑块位置改变事件.
func (s *X结构_滑动条) X事件_滑块位置改变1(回调函数 X事件_滑动条_滑块位置改变1) bool {
	return xc.X元素_注册事件C1(s.X句柄, xcc.X元素事件_滑动条_滑块位置改变, 回调函数)
}

// ------------------------- AddEvent ------------------------- //

// AddEvent_SliderBar_Change 添加滑动条元素滑块位置改变事件.
//
// pFun: 回调函数.
//
// allowAddingMultiple: 允许添加多个回调函数.
func (s *X结构_滑动条) AddEvent_SliderBar_Change(pFun X事件_滑动条_滑块位置改变1, allowAddingMultiple ...bool) int {
	return EventHandler.AddCallBack(s.X句柄, xcc.X元素事件_滑动条_滑块位置改变, onXE_SLIDERBAR_CHANGE, pFun, allowAddingMultiple...)
}

// onXE_SLIDERBAR_CHANGE 滑动条元素滑块位置改变事件.
func onXE_SLIDERBAR_CHANGE(hEle int, pos int32, pbHandled *bool) int {
	cbs := EventHandler.GetCallBacks(hEle, xcc.X元素事件_滑动条_滑块位置改变)
	var ret int
	for i := len(cbs) - 1; i >= 0; i-- {
		if cbs[i] != nil {
			ret = cbs[i].(X事件_滑动条_滑块位置改变1)(hEle, pos, pbHandled)
			if *pbHandled {
				break
			}
		}
	}
	return ret
}
